package com.sky;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.jupiter.api.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

//测试写入Excel表格
public class Student {
    @Test
    public void Excel() throws IOException {
        //创建Excel文档对象
        XSSFWorkbook xssFWorkbook = new XSSFWorkbook();
        //Excel页面对象
        XSSFSheet sheet = xssFWorkbook.createSheet();
        //创建行,java大部分索引都是从0开始的
        //这里相当于是第一行
        XSSFRow row = sheet.createRow(0);
        //在行内可以添加单元格写入数据
        row.createCell(0).setCellValue("职位");
        row.createCell(1).setCellValue("兴趣");
        //这里相当于是第二行
        XSSFRow row1 = sheet.createRow(1);
        row1.createCell(0).setCellValue("我是小飞侠");
        row1.createCell(1).setCellValue("我爱全国送快递");

        FileOutputStream fos = new FileOutputStream("D:\\microforce\\Take-out-environment\\sky-take-out\\sky-server\\student1.xlsx");
        xssFWorkbook.write(fos);
        //释放资源
        fos.close();
        xssFWorkbook.close();

    }


    @Test
    public void readExcel() throws IOException {
        //创建字节输入流读取数据
        FileInputStream fis = new FileInputStream("student1.xlsx");
        //把流对象给Excel对象进行封装
        XSSFWorkbook xssFWorkbook = new XSSFWorkbook(fis);
        //根据表个数据我们可以获取到第一页的页码，如果有更多可以遍历循环等到最后一页
        XSSFSheet sheetAt = xssFWorkbook.getSheetAt(0);
        //我们可以继续读取当页行和列的数据
        XSSFRow row = sheetAt.getRow(0);
        //这里我们可以获得每一行的最后一个单元格
        short lastCellNum = row.getLastCellNum();
        String nameHeader = sheetAt.getRow(0).getCell(0).getStringCellValue();
        String ageHeader = sheetAt.getRow(0).getCell(1).getStringCellValue();
        System.out.println(nameHeader+ageHeader);
        //当数据里的详细数据是其他数据类型时，我们需要先获取表头的信息，羡慕的详情信息重新获取
        //获取最后一行的数据
        int lastRowNum = sheetAt.getLastRowNum();
        //应为我们获取到了表头，所以我们直接获取下一行的数据
        for (int i = 1; i <= lastRowNum; i++) {
            //表中第一个是字符串，第二个是个int类型，我们进行查找
            String value = sheetAt.getRow(i).getCell(0).getStringCellValue();
            int value1 = (int) sheetAt.getRow(i).getCell(1).getNumericCellValue();
            System.out.println(value+value1);
        }

    }


    @Test
    public void read1Excel() throws IOException {
        //创建字节输入流读取数据
        FileInputStream fis = new FileInputStream("C:\\Users\\柳文迪\\Documents\\WeChat Files\\wxid_040j2h73z23o22\\FileStorage\\File\\2023-04\\激活码—上海黑马JavaEE就业157期（20230307面授）.xlsx");
        //把流对象给Excel对象进行封装
        XSSFWorkbook xssFWorkbook = new XSSFWorkbook(fis);
        //因为表格里全部都是字符串数据，我们直接循环获取所有的即可
        //我们先获取当前的页的所有数据.这里我们选择根据名字获取
        XSSFSheet sheet = xssFWorkbook.getSheet("上海黑马JavaEE就业157期（20230307面授）");
        //根据页码获取最后一行
        int lastRowNum = sheet.getLastRowNum();
        for (int i = 0; i <= lastRowNum; i++) {
            //应为每一行的单元格也很多，我们获取到每一行的最有一个单元格
            int lastCellNum = sheet.getRow(i).getLastCellNum();
            for (int j = 0; j < lastCellNum; j++) {
                //获取每一个单元格进行拼接
                String stringCellValue = sheet.getRow(i).getCell(j).getStringCellValue();
                System.out.println(stringCellValue);
            }
            System.out.println("-------------------------");
        }

    }

}
